using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace AppManagement.MainManagers
{
	#region using
	using DevComponents.DotNetBar;
	using AppManagement.Models;
	using AppManagement.Repositories;
	using AppManagement.Helpers;
	using System.Data;
	using System.Drawing;
	using System.IO;
	#endregion

	public partial class FrmDatVeXe : Office2007Form
	{
		public EventHandler Handler { get; set; }

        public FrmDatVeXe()
		{
			InitializeComponent();
		}

		private void FrmQuanLyTuyenXe_Load(object sender, EventArgs e)
		{
			InitGridView();
            InitGridViewChuyenXe();
			dtgvData.ClearSelection();
		}

		private void InitGridView()
		{
			DataGridViewTextBoxColumn objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "Mã tuyến xe",
				DataPropertyName = "MaTuyenXe",
				Name = "MaTuyenXe",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/5))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "Điểm bắt đầu",
				DataPropertyName = "MaDiemBatDau",
				Name = "MaDiemBatDau",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/5))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
                HeaderText = "Điểm kết thúc",
				DataPropertyName = "MaDiemKetThuc",
				Name = "MaDiemKetThuc",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/5))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "Độ dài (Km)",
				DataPropertyName = "DoDai",
				Name = "DoDai",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/5))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "Ngày hoạt động",
				DataPropertyName = "NgayHoatDong",
				Name = "NgayHoatDong",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/5)) - 1
			};
			dtgvData.Columns.Add(objColumn);
		}

        /// <summary>
        /// Load danh sach tuyen xe
        /// </summary>
		private void LoadTuyenXes()
		{
			var lstItem = TuyenXeRepository.SelectAll();

			var dt = new DataTable();
			dt.Columns.Add("MaTuyenXe");
			dt.Columns.Add("MaDiemBatDau");
			dt.Columns.Add("MaDiemKetThuc");
			dt.Columns.Add("DoDai");
			dt.Columns.Add("NgayHoatDong");
			for (int i = 0; i < lstItem.Count; i++)
			{
				dt.Rows.Add(lstItem[i].MaTuyenXe, lstItem[i].DiaDiem.TenDiaDiem, lstItem[i].DiaDiem1.TenDiaDiem, lstItem[i].DiaDiem1.DoDai, "Thứ: " + lstItem[i].NgayHoatDong);
			}
			DataView objTimeSheetDV = new System.Data.DataView(dt);
			objTimeSheetDV.AllowNew = false;
			dtgvData.AutoGenerateColumns = false;
			dtgvData.DataSource = objTimeSheetDV;
			dtgvData.ClearSelection();
		}

        private void dtgvData_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgvData.SelectedRows == null || dtgvData.SelectedRows.Count == 0)
                return;

            txtMaTuyenXe.Text = dtgvData.SelectedRows[0].Cells["MaTuyenXe"].Value.ToString();
            var tuyenXe = TuyenXeRepository.SelectByID(int.Parse(dtgvData.SelectedRows[0].Cells["MaTuyenXe"].Value.ToString()));

            LoadChuyenXe(tuyenXe);
            DisableNgayKhongHoatDong(tuyenXe.NgayHoatDong);
            DisplayNgayHoatDong();
        }

        /// <summary>
        /// Hien thi ngay hoat dong
        /// </summary>
        private void DisplayNgayHoatDong()
        {
            // Loop for all chuyen xe
            foreach (DataGridViewRow row in dtgvChuyenXe.Rows)
            {
                var maChuyenXe = int.Parse(row.Cells["MaChuyenXe"].Value.ToString());
                var lichHoatDong = LichHoatDongRepository.SelectByMaChuyenXeNgayBDNgayKT(maChuyenXe, dtTuNgay.Value, dtDenNgay.Value);
                // Da lap lich hoat dong cho chuyen xe nay
                if (lichHoatDong != null)
                {
                    ChiTietLichHoatDong chitiet = null;
                    // Thu 2
                    DataGridViewDisableButtonCell buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu2"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Thu 3
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu3"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(1)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Thu 4
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu4"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(2)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Thu 5
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu5"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(3)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Thu 6
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu6"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(4)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Thu 7
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu7"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(5)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;

                    // Chu nhat
                    buttonCell = (DataGridViewDisableButtonCell)row.Cells["CN"];
                    if ((chitiet = lichHoatDong.ChiTietLichHoatDong.FirstOrDefault(n => n.NgayHoatDong.Equals(dtTuNgay.Value.AddDays(6)))) != null)
                    {
                        buttonCell.Value = "Đặt vé";
                        buttonCell.Tag = chitiet;
                    }
                    else
                        buttonCell.Enabled = false;
                }
                else
                {
                    ((DataGridViewDisableButtonCell)row.Cells["Thu2"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["Thu3"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["Thu4"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["Thu5"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["Thu6"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["Thu7"]).Enabled = false;
                    ((DataGridViewDisableButtonCell)row.Cells["CN"]).Enabled = false;
                }
            }
        }

        /// <summary>
        /// Tuyen xe chi hoat dong o 1 so ngay nhat dinh, cac ngay con lai se bi disable di
        /// </summary>
        /// <param name="ngayHoatDong"></param>
        private void DisableNgayKhongHoatDong(string ngayHoatDong)
        {
            // Loop for all chuyen xe
            foreach (DataGridViewRow row in dtgvChuyenXe.Rows)
            {
                row.Cells["MaChuyenXe"].ReadOnly = true;
                row.Cells["HoTen"].ReadOnly = true;
                row.Cells["MaBSXe"].ReadOnly = true;
                row.Cells["GioKhoiHanh"].ReadOnly = true;
                row.Cells["DonGia"].ReadOnly = true;

                // First disable all cell ngay hoat dong
                DataGridViewDisableButtonCell buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu2"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("2"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu3"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("3"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu4"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("4"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu5"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("5"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu6"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("6"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["Thu7"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("7"))
                {
                    buttonCell.Enabled = true;
                }

                buttonCell = (DataGridViewDisableButtonCell)row.Cells["CN"];
                buttonCell.Enabled = false;
                if (ngayHoatDong.Contains("cn"))
                {
                    buttonCell.Enabled = true;
                }
            }
        }

        private void InitGridViewChuyenXe()
        {
            DataGridViewTextBoxColumn objColumn = new DataGridViewTextBoxColumn
            {
                HeaderText = "Mã chuyến xe",
                DataPropertyName = "MaChuyenXe",
                Name = "MaChuyenXe",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn);

            objColumn = new DataGridViewTextBoxColumn
            {
                HeaderText = "Tài xế",
                DataPropertyName = "HoTen",
                Name = "HoTen",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn);

            objColumn = new DataGridViewTextBoxColumn
            {
                HeaderText = "Mã BS Xe",
                DataPropertyName = "MaBSXe",
                Name = "MaBSXe",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn);

            objColumn = new DataGridViewTextBoxColumn
            {
                HeaderText = "Giờ khởi hành",
                DataPropertyName = "GioKhoiHanh",
                Name = "GioKhoiHanh",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn);

            objColumn = new DataGridViewTextBoxColumn
            {
                HeaderText = "Đơn giá",
                DataPropertyName = "DonGia",
                Name = "DonGia",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) 
            };
            dtgvChuyenXe.Columns.Add(objColumn);

            DataGridViewDisableButtonColumn objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 2",
                DataPropertyName = "Thu2",
                Name = "Thu2",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 3",
                DataPropertyName = "Thu3",
                Name = "Thu3",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) 
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 4",
                DataPropertyName = "Thu4",
                Name = "Thu4",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) 
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 5",
                DataPropertyName = "Thu5",
                Name = "Thu5",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12))
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 6",
                DataPropertyName = "Thu6",
                Name = "Thu6",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) 
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Thứ 7",
                DataPropertyName = "Thu7",
                Name = "Thu7",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) 
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            objColumn2 = new DataGridViewDisableButtonColumn
            {
                HeaderText = "Chủ nhật",
                DataPropertyName = "CN",
                Name = "CN",
                Width = (int)((dtgvChuyenXe.Width - dtgvChuyenXe.RowHeadersWidth) * ((double)1 / 12)) - 2
            };
            dtgvChuyenXe.Columns.Add(objColumn2);

            dtgvChuyenXe.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        }

        /// <summary>
        /// Load danh sach chuyen xe ung voi tuyen xe duoc chon
        /// </summary>
        /// <param name="tuyenxe"></param>
        private void LoadChuyenXe(TuyenXe tuyenxe)
        {
            var lst = ChuyenXeRepository.SelectByMaTuyenXe(tuyenxe.MaTuyenXe);

            DataTable dt = new DataTable();
            dt.Columns.Add("MaChuyenXe");
            dt.Columns.Add("HoTen");
            dt.Columns.Add("MaBSXe");
            dt.Columns.Add("GioKhoiHanh");
            dt.Columns.Add("DonGia");

            foreach (var item in lst)
            {
                dt.Rows.Add(item.MaChuyenXe, item.NhanVien.HoTen, item.MaBSXe, item.GioKhoiHanh, string.Format("{0:0,0}", item.DonGia));
            }

            DataView objTimeSheetDV = new System.Data.DataView(dt);
            objTimeSheetDV.AllowNew = false;
            dtgvChuyenXe.AutoGenerateColumns = false;
            dtgvChuyenXe.DataSource = objTimeSheetDV;
            dtgvChuyenXe.ClearSelection();  
        }

        private bool ValidateInput(ref string errorText)
        {
            if (dtTuNgay.Value == DateTime.MinValue)
            {
                errorText = "Vui lòng chọn ngày bắt đầu";
                return false;
            }
            if (dtDenNgay.Value == DateTime.MinValue)
            {
                errorText = "Vui lòng chọn ngày kết thúc";
                return false;
            }
            if (string.Empty.Equals(txtMaTuyenXe.Text))
            {
                errorText = "Vui lòng chọn tuyến xe";
                return false;
            }
            if (string.Empty.Equals(txtMaChuyenXe.Text))
            {
                errorText = "Vui lòng chọn chuyến xe";
                return false;
            }
            return true;
        }

        private string FromENDayOfWeekToVN(DayOfWeek dayOfWeek)
        {
            var result = string.Empty;
            switch (dayOfWeek)
            {
                case DayOfWeek.Monday:
                    result = "2";
                    break;
                case DayOfWeek.Tuesday:
                    result = "3";
                    break;
                case DayOfWeek.Wednesday:
                    result = "4";
                    break;
                case DayOfWeek.Thursday:
                    result = "5";
                    break;
                case DayOfWeek.Friday:
                    result = "6";
                    break;
                case DayOfWeek.Saturday:
                    result = "7";
                    break;
                case DayOfWeek.Sunday:
                    result = "Chủ nhật";
                    break;
            }
            return result;
        }

        private void dtTuNgay_ValueChanged(object sender, EventArgs e)
        {
            if (dtTuNgay.Value == DateTime.MinValue)
                return;
            var selectedDate = dtTuNgay.Value;
            if (selectedDate.DayOfWeek != DayOfWeek.Monday)
            {
                MessageBoxEx.Show("Ngày bắt đầu phải là thứ 2", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                dtTuNgay.Value = DateTime.MinValue;
                return;
            }

            if (dtDenNgay.Value != DateTime.MinValue)
            {
                if (dtTuNgay.Value > dtDenNgay.Value)
                {
                    MessageBoxEx.Show("Ngày bắt đầu lớn hơn ngày kết thúc", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dtTuNgay.Value = DateTime.MinValue;
                    return;
                }
                if (dtDenNgay.Value > dtTuNgay.Value.AddDays(6))
                {
                    MessageBoxEx.Show("Ngày bắt đầu và ngày kết thúc không cùng 1 tuần", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dtTuNgay.Value = DateTime.MinValue;
                    return;
                }

                // Load danh sach tuyen xe
                LoadTuyenXes();
            }
        }

        private void dtDenNgay_ValueChanged(object sender, EventArgs e)
        {
            if (dtDenNgay.Value == DateTime.MinValue)
                return;
            var selectedDate = dtDenNgay.Value;
            if (selectedDate.DayOfWeek != DayOfWeek.Sunday)
            {
                MessageBoxEx.Show("Ngày kết thúc phải là chủ nhật", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                dtDenNgay.Value = DateTime.MinValue;
                return;
            }

            if (dtTuNgay.Value != DateTime.MinValue)
            {
                if (dtTuNgay.Value > dtDenNgay.Value)
                {
                    MessageBoxEx.Show("Ngày bắt đầu lớn hơn ngày kết thúc", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dtDenNgay.Value = DateTime.MinValue;
                    return;
                }
                if (dtDenNgay.Value > dtTuNgay.Value.AddDays(6))
                {
                    MessageBoxEx.Show("Ngày bắt đầu và ngày kết thúc không cùng 1 tuần", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dtDenNgay.Value = DateTime.MinValue;
                    return;
                }

                // Load danh sach tuyen xe
                LoadTuyenXes();
            }
        }

        private void dtgvChuyenXe_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgvChuyenXe.SelectedRows == null || dtgvChuyenXe.SelectedRows.Count == 0)
                return;

            txtMaChuyenXe.Text = dtgvChuyenXe.SelectedRows[0].Cells["MaChuyenXe"].Value.ToString();

            if (e.ColumnIndex > 4)
            {
                DataGridViewDisableButtonCell buttonCell = (DataGridViewDisableButtonCell)dtgvChuyenXe.Rows[e.RowIndex].Cells[e.ColumnIndex];

                if (buttonCell.Tag != null)
                {
                    FrmQuanLyVe frm = new FrmQuanLyVe((ChiTietLichHoatDong)buttonCell.Tag);
                    frm.ShowDialog();
                }
            }
        }

        private void btnNhapMoi_Click(object sender, EventArgs e)
        {
            dtTuNgay.Value = DateTime.MinValue;
            dtDenNgay.Value = DateTime.MinValue;
            txtMaTuyenXe.Text = string.Empty;
            txtMaChuyenXe.Text = string.Empty;
            dtgvData.DataSource = null;
            dtgvChuyenXe.DataSource = null;
        }
	}

}
